// 时区处理工具函数

/**
 * 获取中国时区的当前时间
 * @returns {Date} 中国时区的Date对象
 */
export const getChinaTime = () => {
  const now = new Date();
  // 使用Intl.DateTimeFormat获取中国时区的各个时间组件
  const formatter = new Intl.DateTimeFormat('en-CA', {
    timeZone: 'Asia/Shanghai',
    year: 'numeric',
    month: '2-digit',
    day: '2-digit',
    hour: '2-digit',
    minute: '2-digit',
    second: '2-digit',
    hour12: false
  });
  
  const parts = formatter.formatToParts(now);
  const partsObj = {};
  parts.forEach(part => {
    partsObj[part.type] = part.value;
  });
  
  // 构造中国时区的Date对象
  return new Date(
    parseInt(partsObj.year),
    parseInt(partsObj.month) - 1, // 月份从0开始
    parseInt(partsObj.day),
    parseInt(partsObj.hour),
    parseInt(partsObj.minute),
    parseInt(partsObj.second)
  );
};

/**
 * 获取中国时区的当前日期字符串 (YYYY-MM-DD)
 * @returns {string} 日期字符串
 */
export const getChinaDateString = () => {
  const now = new Date();
  return now.toLocaleDateString('en-CA', {timeZone: 'Asia/Shanghai'});
};

/**
 * 获取中国时区的当前时间分钟数
 * @returns {number} 从00:00开始的分钟数
 */
export const getChinaTimeMinutes = () => {
  const now = new Date();
  const formatter = new Intl.DateTimeFormat('en-US', {
    timeZone: 'Asia/Shanghai',
    hour: '2-digit',
    minute: '2-digit',
    hour12: false
  });
  
  const timeStr = formatter.format(now);
  const [hours, minutes] = timeStr.split(':').map(num => parseInt(num));
  return hours * 60 + minutes;
};

/**
 * 格式化中国时区时间为本地化字符串
 * @param {Date} date - 可选的Date对象，默认为当前时间
 * @returns {string} 格式化的时间字符串
 */
export const formatChinaTime = (date = null) => {
  const targetDate = date || new Date();
  return targetDate.toLocaleString('zh-CN', {timeZone: 'Asia/Shanghai'});
};